package com.hrm.service.Impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hrm.javabean.UserInf;
import com.hrm.mapper.UserInfMapper;
import com.hrm.service.UserInfService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Service
public class UserInfServiceImpl extends ServiceImpl<UserInfMapper, UserInf> implements UserInfService {
    @Autowired
    UserInfMapper userInfMapper;

    @Override
    public List<Object> login(String loginname, String password) {
        LambdaQueryWrapper<UserInf> wrapper = new LambdaQueryWrapper<>();
        // 根据登录名查询用户
        wrapper.eq(UserInf::getLoginName, loginname);
        wrapper.ne(UserInf::getStatus, 2);
        UserInf user = userInfMapper.selectOne(wrapper);
        // 用户不存在
        if (user == null) {
            return null;
        }
        List<Object> list = new ArrayList<>();
        // 密码正确
        if (user.getPassword().equals(password)) {
            // 待审核
            if (user.getStatus() == 0) {
                list.add("0");
                return list;
            }
            // 审核不通过
            if (user.getStatus() == 3) {
                list.add("3");
                return list;
            }
            // 审核通过
            else {
                list.add("1");
                list.add(user);
                return list;
            }
        }
        // 密码错误
        return null;
    }

    // 查询登录名是否已存在
    @Override
    public int checkLoginName(String loginname) {
        LambdaQueryWrapper<UserInf> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(UserInf::getLoginName, loginname);
        // 该用户是否在审核中或通过
        wrapper.in(UserInf::getStatus, 0, 1);
        Integer i = userInfMapper.selectCount(wrapper);
        return i;
    }

    // 添加用户
    @Override
    public int addUser(UserInf userInf) {
        System.out.println(userInf);
        int i = checkLoginName(userInf.getLoginName());
        // 该用户在审核中或通过，添加失败
        if (i >= 1) {
            return 0;
        }
        LambdaQueryWrapper<UserInf> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(UserInf::getLoginName, userInf.getLoginName());
        wrapper.in(UserInf::getStatus, 2, 3);
        Integer i2 = userInfMapper.selectCount(wrapper);

        // 该用户被删除或审核不通过，update即可
        if (i2 >= 1) {
            LambdaQueryWrapper<UserInf> wrapper1 = new LambdaQueryWrapper<>();
            wrapper1.eq(UserInf::getLoginName, userInf.getLoginName());
            userInf.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            if (userInf.getStatus() != 1) {
                userInf.setStatus(0);
            }
            return userInfMapper.update(userInf, wrapper1);
        }
        // 否则插入
        return userInfMapper.insert(userInf);
    }
}
